#pragma once
// 插入排序
void InsertSort(int* a, int n);

// 希尔排序
void ShellSort(int* a, int n);

// 选择排序
void SelectSort(int* a, int n);

void Swap(int* p1, int* p2);
// 堆排序
void AdjustDwon(int* a, int n, int root);
void HeapSort(int* a, int n);


// 冒泡排序
void BubbleSort(int* a, int n);

// 快速排序递归实现
// 快速排序hoare版本

int PartSort1(int* a, int left, int right);  //还可以用三数取中做key，以及长度小于十采用插入排序减少递归
// 快速排序挖坑法
int PartSort2(int* a, int left, int right);
// 快速排序前后指针法
int PartSort3(int* a, int left, int right);
void QuickSort(int* a, int left, int right);

// 快速排序 非递归实现
void QuickSortNonR(int* a, int left, int right);

//快排的三路划分（更加稳定，在大数据中更趋向于稳定的平均复杂度O（nlogn））
void QuickSortadd1(int* a, int left, int right);
//快排的自省排序
void IntroSort(int* a, int left, int right, int depth, int defaultDepth);
void QuickSortadd2(int* a, int left, int right);




//归并排序的递归形式和非递归形式
void MergeSort(int* a, int n);
void MergeSortNonR(int* a, int n);
